ποΈGitΠ―ΡΠ°ποΈ
A Rust implementation of Reticulum
σ° Files β’ σ±£ Work (0) β’ σ° Commits (14) β’ σ°¬ Branches (1) β’ σ°Ό Tags (4) β’ σ° Thanks (1) β’ ο Stats
-β
<div align="center">
rsReticulum
A Rust implementation of Reticulum.




Ratspeak |
rsLXMF |
</div>
rsReticulum is a Rust implementation of Reticulum. This is not a fork of
Reticulum; it is Reticulum written in a different language, focused on staying
interoperable. It is not the source-of-truth implementation, do not treat it as one.
Commands are intentionally namespaced for Rust with T383838*-rs command names, so
rsReticulum can live beside other Reticulum tools on T383838PATH without worry.
Contents
Build It
macOS
Install Rust with T383838rustup, then install Apple's command-line build tools:
T282828
xcode-select --install
Build the tools:
T282828
Tffa657cd rsReticulum
cargo build --release
Linux, Raspberry Pi, and VPS Hosts
Install Rust with T383838rustup, then install the needed packages:
Debian, Ubuntu, and Raspberry Pi OS:
T282828
sudo apt update
sudo apt install -y build-essential pkg-config libudev-dev
Fedora:
T282828
sudo dnf install gcc make pkgconf-pkg-config systemd-devel
Arch:
T282828
sudo pacman -S --needed base-devel pkgconf systemd
Build the tools:
T282828
Tffa657cd rsReticulum
cargo build --release
Windows
Install Rust with the MSVC toolchain. If Rust or Cargo asks for Visual Studio
Build Tools, install the "Desktop development with C++" workload.
Build from PowerShell:
T282828
Tffa657cd Te6edf3rsReticulum
Te6edf3cargo Te6edf3build Tb4b4b4-Te6edf3-release
After the build, use the commands below with T383838./target/release/<tool> on
macOS/Linux or T383838.\target\release\<tool>.exe on Windows.
Tool Usage
The T383838rns-tools crate builds Rust-namespaced Reticulum utilities:
ββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Binary β Purpose β
ββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β rnsd-rs β Shared Reticulum daemon. Owns interfaces and local control sockets. β
β rnstatus-rs β Interface, announce, path, link, and aggregate status. β
β rnpath-rs β Path lookup, path table inspection, rates, drops, and blackhole actions. β
β rnid-rs β Identity generation, inspection, public/private import/export, hashing, signing,β¦ β
β rnprobe-rs β Destination probe utility with loss and round-trip reporting. β
β rncp-rs β File transfer utility with send, listen, and authenticated fetch modes. β
β rnodeconf-rs β RNode inspection, safe configuration, EEPROM backup, and trust utility. β
β rnsh-rs β Reticulum shell listener/client. β
ββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Commands:
T282828
rnsd-rs [-c CONFIG_DIR] [-v|-q]... [--service] [--exampleconfig] [--version]
rnstatus-rs [--all] [--sort rate|traffic|rx|tx|rxs|txs|announces|arx|atx|held]
[--reverse] [--announce-stats] [--link-stats] [--totals] [--json]
[--discovered|-D] [-m [-I SECONDS]] [FILTER]
[-R <transport_hash> -i <identity_file>]
rnpath-rs [--table|--rates] [destination_hash] [--max HOPS]
rnpath-rs <destination_hash>
rnprobe-rs [-s SIZE] [-n COUNT] [-t TIMEOUT] [-w WAIT] [--json] <destination_hash>
rnid-rs [-i IDENTITY|-g FILE|-m PUB|-M PRV] [-p|-P] [-x|-X] [-H ASPECT]
[-a [ASPECT]] [-e FILE|-d FILE|-s FILE|-V FILE] [-w FILE] [-f]
[-R|-N] [-t SECONDS] [-b|-B] [--raw] [--version]
rncp-rs <file> <destination_hash>
rncp-rs -l [-b SECONDS] [-s DEST_DIR] [-a <allowed_hash>]...
rncp-rs -l -F [-j <jail_dir>] [-a <allowed_hash>|-n]...
rncp-rs -f <destination_hash> <remote_path> [-s DEST_DIR]
Add the release T383838bin/ directory or T383838target/release to T383838PATH if
you want to call them without a path prefix.
T383838rncp-rs follows the established listener authentication model: without T383838-n,
incoming senders must match T383838-a <hash> or an T383838allowed_identities file.
T383838rncp-rs -F can serve fetch requests to authenticated clients; use
T383838-j <jail> to bound file access unless unrestricted fetch paths are
intentional.
T383838rnodeconf-rs in the current build only covers safe inspection/device setting paths, EEPROM
dump/backup, and trusted-key storage.
T383838rnid-rs tracks the Reticulum 1.2.4 identity utility surface for normal
software identities: public/private import and export, destination hashing,
T383838.pub public identity files, and signed T383838.rsg signature files. The
hardware-backed T383838rnid-rs hw path is a Rust extension behind the T383838hardware
feature and should still be treated as experimental.
Common T383838rnid-rs flows:
T282828
T8b949e# Generate and inspect an identity.
rnid-rs -g ~/.rsReticulum/identities/mgmt
rnid-rs -i ~/.rsReticulum/identities/mgmt -p
rnid-rs -i ~/.rsReticulum/identities/mgmt -H lxmf.delivery
T8b949e# Export text identity material. -x is public, -X is private.
rnid-rs -i ~/.rsReticulum/identities/mgmt -x -b
rnid-rs -i ~/.rsReticulum/identities/mgmt -X -B
T8b949e# Write identity files. Without -X, -w writes a public .pub file.
rnid-rs -i ~/.rsReticulum/identities/mgmt -w mgmt.pub
rnid-rs -i ~/.rsReticulum/identities/mgmt -X -w mgmt.rid
rnid-rs -m <public_identity_data> -w peer.pub
rnid-rs -M <private_identity_data> -X -w restored_identity
T8b949e# Sign and validate. New signatures are Reticulum 1.2.4 .rsg envelopes.
rnid-rs -i ~/.rsReticulum/identities/mgmt -s message.txt
rnid-rs -V message.txt.rsg
rnid-rs -i <signer_hash> -N -V message.txt.rsg
T8b949e# Encrypt to a public identity, decrypt with the matching private identity.
rnid-rs -i mgmt.pub -e message.txt
rnid-rs -i ~/.rsReticulum/identities/mgmt -d message.txt.rfe
Use T383838--raw -s <file> only when a workflow intentionally needs the legacy raw
64-byte signature form. Normal T383838rnid-rs -s <file> produces a T383838.rsg file that
embeds the signer metadata needed for 1.2.4 validation.
Configuration
T383838rnsd-rs reads Reticulum INI config from T383838<config-dir>/config. If no config
directory is supplied, the default is:
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Platform β Default config file β
βββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Linux/macOS β T383838/etc/rsReticulum/config, then T383838~/.config/rsReticulum/config, then T383838~/.rsReticulum/cβ¦ β
β Windows β T383838%APPDATA%rsReticulumconfig β
βββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Generate the annotated starter file:
T282828
rnsd-rs --exampleconfig
Minimal TCP client example:
T282828
Tff7b72[reticulum]
Te6edf3share_instance Tff7b72= Ta5d6ffyes
Te6edf3instance_control_socket Tff7b72= Ta5d6ffyes
Te6edf3enable_transport Tff7b72= Ta5d6ffno
Tff7b72[interfaces]
Tff7b72[[Default TCP]]
Te6edf3type Tff7b72= Ta5d6ffTCPClientInterface
Te6edf3enabled Tff7b72= Ta5d6ffyes
Te6edf3target_host Tff7b72= Ta5d6ffrns.ratspeak.org
Te6edf3target_port Tff7b72= Ta5d6ff4242
Existing Python Reticulum configs should work if every requested interface
is implemented here. Unknown or not-yet-wired interfaces should be removed or
disabled until support lands.
The default shared-instance data/control ports are T38383837428/T38383837429. Ratspeak
uses app-private T38383837430/T38383837431 ports. If you run two daemons at the same
time, give one config a distinct port pair to avoid confliction, like:
T282828
Tff7b72[reticulum]
Te6edf3shared_instance_port Tff7b72= Ta5d6ff37432
Te6edf3instance_control_port Tff7b72= Ta5d6ff37433
Interface Support
Note: This is alpha, if something doesn't work, open an issue with enough context/information to help contribute to fixing it.
ββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Interface β Current behavior β
ββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β TCP client/server β Config-backed IPv4 and IPv6 paths. β
β UDP β Config-backed unicast and multicast paths. β
β Auto β Config-backed UDP discovery plus TCP fallback. β
β Local shared instance β Config-backed TCP loopback or Unix socket dependβ¦ β
β I2P β Config-backed SAM v3.1 path. β
β Pipe β Config-backed subprocess stdio pipe. β
β Backbone β Config-backed high-latency WAN-style tunnel. β
β Serial, KISS, RNode, RNode Multi, AX.25 KISS β Config-backed with the T383838serial feature. β
β BLE RNode β Config-backed with the T383838ble feature. β
β Bluetooth Peer β Runtime API used by Ratspeak. β
β Android USB-OTG β Runtime API for Android app embeddings. β
β Weave β Not implemented. β
β Bluetooth Classic RFCOMM β Not implemented. β
ββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββ
Compatibility Notes
Most daemon and utility flows are implemented for the public T383838*-rs tools:
T383838rnsd-rs, T383838rnstatus-rs, T383838rnpath-rs, T383838rnid-rs, T383838rnprobe-rs, T383838rncp-rs,
T383838rnsh-rs, and T383838rnodeconf-rs.
The current compatibility target is Reticulum 1.2.4 where the matching Rust
surface is implemented and tested. T383838rnid-rs has explicit 1.2.4 coverage for
the normal identity utility flow.
Known gaps and intentional limits:
β’ T383838rnx, T383838rnir, T383838rnpkg, T383838rngit, and T383838git-remote-rns are not implemented. There is on-going work in progress for supporting these.
β’ T383838rnodeconf-rs is partial; safe inspection/configuration and EEPROM
dump/backup are furthest along. Firmware flashing, autoinstall/update, ROM
bootstrap, destructive EEPROM wipe, and full signing-key management are not
implemented.
β’ T383838rnstatus-rs covers the practical operator surface, but does not implement
every display/API behavior from upstream.
β’ T383838rnpath-rs remote mode is read-only for table/rates, including destination
filters, apart from the remote blackhole-list query path. Remote mutations
and remote active path requests are full gaps.
β’ T383838rncp-rs implements the listener T383838-b announce interval. T383838-P/--phy-rates
is not supported for the time being.
β’ T383838rns-ratkey hardware identity support is feature-gated and still has known
hardware-verification gaps before it should be described as release-ready.
Contributing
If the issue or contribution belongs upstream as well, start there. Python LXMF
and Reticulum remain the reference implementations.
PRs are closed for now until I have time to catch up on everything. I'm tired.
License
Served by rngit 1.4.2 - Generated in 0.17s